package main

import (
	"context"
	"log"
	"time"
)

func main() {
	// 上下文测试,限制最长时间为8秒，
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*8)
	defer cancel()
	// 获取一个整数

	for n := range gen(ctx) {
		if n == 5 {
			cancel()
			break
		}
		log.Println(n)
	}

}

func gen(ctx context.Context) <-chan int {
	var ch = make(chan int)
	go func() {
		var n int
		for {
			select {
			case <-ctx.Done():
				// 接收到结束的信号
				return
			case ch <- n:
				// 接收不到信号就走这里,每秒返回一个
				n++
				time.Sleep(time.Second)
			}
		}

	}()

	return ch
}
